//------------Sonic CD Sonic Script-------------//
//--------Scripted by Christian Whitehead 'The Taxman'--------//
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//

//-------Aliases-------//
#alias 7: TYPE_SONIC

private alias Object.Value7:Player.Tilt
private alias Object.Value10:Player.ScreenXPos
private alias Object.Value11:Player.ScreenYPos

public alias  256 		: GROUP_PLAYERS



function Sonic_ProcessPlayer
	if Options.AttractMode==false
#platform: Mobile
		if Options.TouchControls==1
			if object.ControlMode==0
				CheckTouchRect(0,96,Screen.XCenter,Screen.YSize)
				if CheckResult>-1
					ArrayPos0=CheckResult
					temp0=TouchScreen[ArrayPos0].XPos
					temp0-=Options.DPadX
					temp1=TouchScreen[ArrayPos0].YPos
					temp1-=192
					ATan2(temp2,temp0,temp1)
					temp2+=32
					temp2&=255
					temp2>>=6
					switch temp2
					case 0
						inputDown.Right=1
						break
					case 1
						inputDown.Down=1
						break
					case 2
						inputDown.Left=1
						break
					case 3
						inputDown.Up=1
						break

					endswitch
				endif
				CheckTouchRect(Screen.XCenter,166,Screen.XSize,240)
				if CheckResult>-1
					inputDown.buttonA=1
				endif
				if Object[25].Value7==0
					inputPress.buttonA|=inputDown.buttonA
				endif
				Object[25].Value7=inputDown.buttonA
				if Object[9].Type==TypeName[BlankObject]
					CheckTouchRect(240,0,Screen.XSize,40)
					if CheckResult>-1
						Stage.State=STAGE_PAUSED
						PauseMusic()
						PlaySfx(27,0)
						StopSfx(24)
						StopSfx(25)
						Object[9].Type=TypeName[PauseMenu]
						Object[9].DrawOrder=6
						Object[9].Priority=2
						if Engine.FrameSkipTimer>-1
							Engine.FrameSkipTimer=-1
						endif
						TileLayer[0].Type=3
					endif
					if Engine.Message==2
						Stage.State=STAGE_PAUSED
						PauseMusic()
						PlaySfx(27,0)
						StopSfx(24)
						StopSfx(25)
						Object[9].Type=TypeName[PauseMenu]
						Object[9].DrawOrder=6
						Object[9].Priority=2
						if Engine.FrameSkipTimer>-1
							Engine.FrameSkipTimer=-1
						endif
						TileLayer[0].Type=3
					endif
				endif
			endif
		else
			if object.ControlMode==0
				if Object[9].Type==TypeName[BlankObject]
					if inputPress.Start==1
						inputPress.Start=0
						Stage.State=STAGE_PAUSED
						PauseMusic()
						PlaySfx(27,0)
						StopSfx(24)
						StopSfx(25)
						Object[9].Type=TypeName[PauseMenu]
						Object[9].DrawOrder=6
						Object[9].Priority=2
						if Engine.FrameSkipTimer>-1
							Engine.FrameSkipTimer=-1
						endif
						TileLayer[0].Type=3
					endif
					if Engine.Message==2
						Stage.State=STAGE_PAUSED
						PauseMusic()
						PlaySfx(27,0)
						StopSfx(24)
						StopSfx(25)
						Object[9].Type=TypeName[PauseMenu]
						Object[9].DrawOrder=6
						Object[9].Priority=2
						if Engine.FrameSkipTimer>-1
							Engine.FrameSkipTimer=-1
						endif
						TileLayer[0].Type=3
					endif
				endif
			endif
		endif
#endplatform
#platform: Standard
		if object.ControlMode==0
			if Object[9].Type==TypeName[BlankObject]
				if inputPress.Start==true
					inputPress.Start=false
					if Options.DevMenuFlag==true
						Stage.State=STAGE_PAUSED
						PauseMusic()
						PlaySfx(27,0)
						StopSfx(24)
						StopSfx(25)
						Object[9].Type=TypeName[PauseMenu]
						Object[9].DrawOrder=6
						Object[9].Priority=2
						TileLayer[0].Type=3
					else
						EngineCallback(13)
					endif
				endif
			endif
		endif
#endplatform
		ProcessObjectControl()
	endif
endfunction


function Sonic_HandlePause
	if Options.AttractMode==false
#platform: Mobile
		if object.ControlMode==0
			if Object[9].Type==TypeName[BlankObject]
				CheckTouchRect(240,0,Screen.XSize,40)
				if CheckResult>-1
					Stage.State=STAGE_PAUSED
					PauseMusic()
					PlaySfx(27,0)
					StopSfx(24)
					StopSfx(25)
					Object[9].Type=TypeName[PauseMenu]
					Object[9].DrawOrder=6
					Object[9].Priority=2
					if Engine.FrameSkipTimer>-1
						Engine.FrameSkipTimer=-1
					endif
					TileLayer[0].Type=3
				endif
				if Engine.Message==2
					Stage.State=STAGE_PAUSED
					PauseMusic()
					PlaySfx(27,0)
					StopSfx(24)
					StopSfx(25)
					Object[9].Type=TypeName[PauseMenu]
					Object[9].DrawOrder=6
					Object[9].Priority=2
					if Engine.FrameSkipTimer>-1
						Engine.FrameSkipTimer=-1
					endif
					TileLayer[0].Type=3
				endif
			endif
		endif
#endplatform

#platform: Standard
		if object.ControlMode==0
			if Object[9].Type==TypeName[BlankObject]
				if inputPress.Start==true
					inputPress.Start=false
					if Options.DevMenuFlag==true
						Stage.State=STAGE_PAUSED
						PauseMusic()
						PlaySfx(27,0)
						StopSfx(24)
						StopSfx(25)
						Object[9].Type=TypeName[PauseMenu]
						Object[9].DrawOrder=6
						Object[9].Priority=2
						TileLayer[0].Type=3
					else
						EngineCallback(13)
					endif
				endif
			endif
		endif
#endplatform
	endif
endfunction


function Sonic_HandlePlayerTilt
	if object.Left==1
		Player.Tilt--
		if Player.Tilt<-8
			Player.Tilt=-8
		endif
	else
		if object.Right==1
			Player.Tilt++
			if Player.Tilt>8
				Player.Tilt=8
			endif
		else
			if Player.Tilt>0
				Player.Tilt--
			endif
			if Player.Tilt<0
				Player.Tilt++
			endif
		endif
	endif
	if object.Left==1
		object.Angle+=2
	endif
	if object.Right==1
		object.Angle-=2
	endif
	if object.Angle<0
		object.Angle+=512
	endif
	object.Angle&=511
	Sin(temp0,object.Angle)
	temp0*=object.Speed
	temp0>>=9
	object.XPos+=temp0
	Cos(temp0,object.Angle)
	temp0*=object.Speed
	temp0>>=9
	Object.Value0+=temp0
endfunction


function Sonic_ProcessAnimationSpeed
	Object.Value3+=Object.AnimationSpeed
	if Object.Value3>239
		Object.Value3-=240
		Object.Frame++
		if Object.Frame>Object.Value2
			Object.Frame=Object.Value1
		endif
	endif
endfunction


function Sonic_HandlePlayerHeight
	temp2=0
	temp0-=8
	temp1-=8
	Get16x16TileInfo(CheckResult,temp0,temp1,6)
	if CheckResult==3
		SetBit(temp2,0,1)
	endif
	temp0+=16
	Get16x16TileInfo(CheckResult,temp0,temp1,6)
	if CheckResult==3
		SetBit(temp2,1,1)
	endif
	temp0-=16
	temp1+=16
	Get16x16TileInfo(CheckResult,temp0,temp1,6)
	if CheckResult==3
		SetBit(temp2,2,1)
	endif
	temp0+=16
	Get16x16TileInfo(CheckResult,temp0,temp1,6)
	if CheckResult==3
		SetBit(temp2,3,1)
	endif
	if temp2>0
		temp3=object.Speed
		temp3+=65536
		if Object.Value6!=32
			PlaySfx(SfxName[Bumper2],0)
		endif
		Object.Value6=32
		switch temp2
		case 1
			Player.ScreenXPos=temp3
			Player.ScreenYPos=temp3
			break
		case 2
			Player.ScreenXPos=temp3
			Player.ScreenYPos=temp3
			FlipSign(Player.ScreenXPos)
			break
		case 3
			Player.ScreenXPos=0
			Player.ScreenYPos=temp3
			break
		case 4
			Player.ScreenXPos=temp3
			Player.ScreenYPos=temp3
			FlipSign(Player.ScreenYPos)
			break
		case 5
			Player.ScreenXPos=temp3
			Player.ScreenYPos=0
			break
		case 6
		case 7
			Player.ScreenXPos=temp3
			Player.ScreenYPos=temp3
			break
		case 8
		case 14
		case 15
			Player.ScreenXPos=temp3
			Player.ScreenYPos=temp3
			FlipSign(Player.ScreenXPos)
			FlipSign(Player.ScreenYPos)
			break
		case 9
		case 11
			Player.ScreenXPos=temp3
			Player.ScreenYPos=temp3
			FlipSign(Player.ScreenXPos)
			break
		case 10
			Player.ScreenXPos=temp3
			Player.ScreenYPos=0
			FlipSign(Player.ScreenXPos)
			break
		case 12
			Player.ScreenXPos=0
			Player.ScreenYPos=temp3
			FlipSign(Player.ScreenYPos)
			break
		case 13
			Player.ScreenXPos=temp3
			Player.ScreenYPos=temp3
			FlipSign(Player.ScreenYPos)
			break

		endswitch
	endif
endfunction

function Sonic_HandleTileInteractions
	temp0=object.XPos
	temp0>>=16
	temp1=Object.Value0
	temp1>>=16
	CallFunction(Sonic_HandlePlayerHeight)
	temp0=object.XPos
	temp0>>=16
	temp1=Object.Value0
	temp1>>=16
	Get16x16TileInfo(CheckResult,temp0,temp1,6)
	switch CheckResult
	case 1
		Object[3].Type=TypeName[DustPuff]
		Object[3].DrawOrder=4
		if Object[4].Value5==0
			if object.Speed>163840
				object.Speed=163840
			endif
		else
			if object.Speed>327680
				object.Speed=327680
			endif
		endif
		break
	case 2
		Object[3].Type=TypeName[WaterSplash]
		Object[3].DrawOrder=4
		Object[3].Value5=22526
		if Object[4].Value5>0
			if object.Speed>327680
				object.Speed=327680
			endif
		endif
		break
	case 4
		Object.State=6
		Object.Value6=136
		Object.Frame=54
		Object.Value1=54
		Object.Value2=76
		Object.AnimationSpeed=40
		Object.Value3=0
		object.Speed=65536
		if Object[4].Value3>0
			PlaySfx(4,0)
			temp0=Object[4].Value3
			Object[4].Value3>>=1
			temp0-=Object[4].Value3
			if temp0>8
				temp0=8
			endif
			while temp0>0
				CreateTempObject(TypeName[Ring],0,object.XPos,0)
				Object[TempObjectPos].Priority=1
				Object[TempObjectPos].Value0=Object.Value0
				Rand(temp1,64)
				temp1-=32
				temp1<<=10
				Object[TempObjectPos].Value1=temp1
				Sin(temp1,object.Angle)
				temp1*=96
				Object[TempObjectPos].Value1+=temp1
				Rand(temp1,64)
				temp1+=32
				temp1<<=12
				Object[TempObjectPos].Value2=temp1
				Rand(temp1,64)
				temp1-=32
				temp1<<=10
				Object[TempObjectPos].Value3=temp1
				Cos(temp1,object.Angle)
				temp1*=96
				Object[TempObjectPos].Value3+=temp1
				temp0--
			loop
		endif
		break
	case 5
		Object.State=11
		Object.Value6=0
		Object.Frame=39
		Object.Value1=39
		Object.Value2=42
		Object.AnimationSpeed=80
		Object.Value3=0
		object.YVel=573440
		PlaySfx(11,0)
		break
	case 6
		Object.State=5
		Object.Value6=0
		Object.Frame=48
		Object.Value1=48
		Object.Value2=53
		Object.AnimationSpeed=24
		Object.Value3=0
		object.YVel=163840
			PlaySfx(SfxName[Fan],0)
		break
	case 7
		Object.Value6=40
		Player.ScreenXPos=-786432
		Player.ScreenYPos=0
		Get16x16TileInfo(CheckResult,temp0,temp1,1)
		if CheckResult==1
			FlipSign(Player.ScreenXPos)
		else
			if CheckResult==3
				FlipSign(Player.ScreenXPos)
			endif
		endif
		if Object.State!=4
			PlaySfx(SfxName[Large Booster],0)
		endif
		Object.State=4
		Object.Frame=43
		Object.Value1=43
		Object.Value2=47
		Object.AnimationSpeed=24
		Object.Value3=0
		break
	case 8
		Object.Value6=40
		Player.ScreenXPos=786432
		Player.ScreenYPos=0
		Get16x16TileInfo(CheckResult,temp0,temp1,1)
		if CheckResult==1
			FlipSign(Player.ScreenXPos)
		else
			if CheckResult==3
				FlipSign(Player.ScreenXPos)
			endif
		endif
		if Object.State!=4
			PlaySfx(SfxName[Large Booster],0)
		endif
		Object.State=4
		Object.Frame=43
		Object.Value1=43
		Object.Value2=47
		Object.AnimationSpeed=24
		Object.Value3=0
		break
	case 9
		Object.Value6=40
		Player.ScreenXPos=0
		Player.ScreenYPos=-786432
		Get16x16TileInfo(CheckResult,temp0,temp1,1)
		if CheckResult==2
			FlipSign(Player.ScreenYPos)
		else
			if CheckResult==3
				FlipSign(Player.ScreenYPos)
			endif
		endif
		if Object.State!=4
			PlaySfx(SfxName[Large Booster],0)
		endif
		Object.State=4
		Object.Frame=43
		Object.Value1=43
		Object.Value2=47
		Object.AnimationSpeed=24
		Object.Value3=0
		break
	case 10
		Object.Value6=40
		Player.ScreenXPos=0
		Player.ScreenYPos=786432
		Get16x16TileInfo(CheckResult,temp0,temp1,1)
		if CheckResult==2
			FlipSign(Player.ScreenYPos)
		else
			if CheckResult==3
				FlipSign(Player.ScreenYPos)
			endif
		endif
		if Object.State!=4
			PlaySfx(SfxName[Large Booster],0)
		endif
		Object.State=4
		Object.Frame=43
		Object.Value1=43
		Object.Value2=47
		Object.AnimationSpeed=24
		Object.Value3=0
		break
	case 11
		if Object.Value6!=16
			PlaySfx(SfxName[Small Booster],0)
		endif
		Object.Value6=16
		Player.ScreenXPos=-524288
		Player.ScreenYPos=0
		Get16x16TileInfo(CheckResult,temp0,temp1,1)
		if CheckResult==1
			FlipSign(Player.ScreenXPos)
		else
			if CheckResult==3
				FlipSign(Player.ScreenXPos)
			endif
		endif
		break
	case 12
		if Object.Value6!=16
			PlaySfx(SfxName[Small Booster],0)
		endif
		Object.Value6=16
		Player.ScreenXPos=524288
		Player.ScreenYPos=0
		Get16x16TileInfo(CheckResult,temp0,temp1,1)
		if CheckResult==1
			FlipSign(Player.ScreenXPos)
		else
			if CheckResult==3
				FlipSign(Player.ScreenXPos)
			endif
		endif
		break
	case 13
		if Object.Value6!=16
			PlaySfx(SfxName[Small Booster],0)
		endif
		Object.Value6=16
		Player.ScreenXPos=0
		Player.ScreenYPos=-524288
		Get16x16TileInfo(CheckResult,temp0,temp1,1)
		if CheckResult==2
			FlipSign(Player.ScreenYPos)
		else
			if CheckResult==3
				FlipSign(Player.ScreenYPos)
			endif
		endif
		break
	case 14
		if Object.Value6!=16
			PlaySfx(SfxName[Small Booster],0)
		endif
		Object.Value6=16
		Player.ScreenXPos=0
		Player.ScreenYPos=524288
		Get16x16TileInfo(CheckResult,temp0,temp1,1)
		if CheckResult==2
			FlipSign(Player.ScreenYPos)
		else
			if CheckResult==3
				FlipSign(Player.ScreenYPos)
			endif
		endif
		break

	endswitch
endfunction


event ObjectMain
	//Player.ScreenXPos = object.iXPos
	//Player.ScreenYPos = object.iYPos
	//Player.ScreenXPos -= screen.XCenter
	//Player.ScreenYPos -= screen.YSize
	if Object[4].Value5>0
		Object[4].Value5--
	endif
	switch Object.State
	case 0
		CallFunction(Sonic_ProcessAnimationSpeed)
		Object.Value6++
		if Object.Value6==120
			Object.Value6=0
			Object.State=1
			Object.Frame=2
			Object.Value1=4
			Object.Value2=4
			Object.Value3=0
			Object.AnimationSpeed=20
		endif
		break
	case 1
		CallFunction(Sonic_ProcessAnimationSpeed)
		Object.Value6++
		if Object.Value6==140
			Object.Value6=0
			Object.State=2
			Object.Frame=9
			Object.Value1=9
			Object.Value2=14
			object.Speed=0
		endif
		break
	case 2
		CallFunction(Sonic_ProcessPlayer)
		if object.Speed<327680
			object.Speed+=2048
		else
			object.Speed=327680
		endif
		if inputDown.Down==1
			object.Speed-=3072
			if object.Speed<122880
				object.Speed=122880
			endif
		endif
		Object.AnimationSpeed=object.Speed
		Object.AnimationSpeed*=15
		Object.AnimationSpeed/=81920
		Object.AnimationSpeed+=20
		CallFunction(Sonic_HandlePlayerTilt)
		CallFunction(Sonic_ProcessAnimationSpeed)
		if Object.Value6>0
			Object.Value6--
			object.XPos+=Player.ScreenXPos
			Object.Value0+=Player.ScreenYPos
		endif
		CallFunction(Sonic_HandleTileInteractions)
		if object.JumpPress==1
			Object.State=3
			Object.Value6=0
			Object.Frame=39
			Object.Value1=39
			Object.Value2=42
			Object.Value3=0
			Object.AnimationSpeed=80
			object.YVel=286720
			PlaySfx(0,0)
		endif
		break
	case 3
		CallFunction(Sonic_ProcessPlayer)
		if object.Speed<327680
			object.Speed+=2048
		endif
		if inputDown.Down==1
			object.Speed-=3072
			if object.Speed<122880
				object.Speed=122880
			endif
		endif
		if object.JumpHold==0
			if object.YVel>172032
				object.YVel=172032
			endif
		endif
		CallFunction(Sonic_HandlePlayerTilt)
		CallFunction(Sonic_ProcessAnimationSpeed)
		object.YVel-=8192
		object.YPos+=object.YVel
		if object.YPos<0
			object.YPos=0
			if Object[4].Value0>0
				if Object[4].Value5==0
					Object.State=2
					Object.Frame=9
					Object.Value1=9
					Object.Value2=14
					Object.Value3=0
				else
					Object.State=7
					Object.Frame=77
					Object.Value1=77
					Object.Value2=80
					Object.AnimationSpeed=80
					Object.Value3=0
				endif
			else
				object.ControlMode=-1
				Object.State=8
				Stage.TimeEnabled=0
			endif
		endif
		break
	case 4
		CallFunction(Sonic_ProcessPlayer)
		if object.Speed<327680
			object.Speed+=2048
		endif
		if inputDown.Down==1
			object.Speed-=3072
			if object.Speed<122880
				object.Speed=122880
			endif
		endif
		CallFunction(Sonic_HandlePlayerTilt)
		CallFunction(Sonic_ProcessAnimationSpeed)
		if Object.Value6>0
			Object.Value6--
			object.XPos+=Player.ScreenXPos
			Object.Value0+=Player.ScreenYPos
		else
			if Object[4].Value5==0
				Object.State=2
				Object.Frame=9
				Object.Value1=9
				Object.Value2=14
				Object.Value3=0
			else
				Object.State=7
				Object.Frame=77
				Object.Value1=77
				Object.Value2=80
				Object.AnimationSpeed=80
				Object.Value3=0
			endif
		endif
		CallFunction(Sonic_HandleTileInteractions)
		if object.JumpPress==1
			Object.State=3
			Object.Value6=0
			Object.Frame=39
			Object.Value1=39
			Object.Value2=42
			Object.AnimationSpeed=80
			object.YVel=286720
			PlaySfx(0,0)
		endif
		break
	case 5
		CallFunction(Sonic_ProcessPlayer)
		if object.Speed<327680
			object.Speed+=2048
		endif
		CallFunction(Sonic_HandlePlayerTilt)
		CallFunction(Sonic_ProcessAnimationSpeed)
		object.YVel-=2048
		object.YPos+=object.YVel
		if object.YPos<0
			object.YPos=0
			if Object[4].Value0>0
				if Object[4].Value5==0
					Object.State=2
					Object.Frame=9
					Object.Value1=9
					Object.Value2=14
					Object.Value3=0
				else
					Object.State=7
					Object.Frame=77
					Object.Value1=77
					Object.Value2=80
					Object.AnimationSpeed=80
					Object.Value3=0
				endif
			else
				Object.State=8
				object.ControlMode=-1
				Stage.TimeEnabled=0
			endif
		endif
		break
	case 6
		CallFunction(Sonic_HandlePause)
		object.Left=0
		object.Right=0
		CallFunction(Sonic_HandlePlayerTilt)
		CallFunction(Sonic_ProcessAnimationSpeed)
		temp0=object.XPos
		temp0>>=16
		temp1=Object.Value0
		temp1>>=16
		Get16x16TileInfo(CheckResult,temp0,temp1,6)
		if CheckResult==3
			Object.State=2
			Object.Frame=9
			Object.Value1=9
			Object.Value2=14
			Object.Value3=0
		endif
		if Object.Value6>0
			Object.Value6--
		else
			if Object[4].Value5==0
				Object.State=2
				Object.Frame=9
				Object.Value1=9
				Object.Value2=14
				Object.Value3=0
			else
				Object.State=7
				Object.Frame=77
				Object.Value1=77
				Object.Value2=80
				Object.AnimationSpeed=80
				Object.Value3=0
			endif
		endif
		break
	case 7
		CallFunction(Sonic_ProcessPlayer)
		if object.Speed<458752
			object.Speed+=4096
		endif
		if inputDown.Down==1
			object.Speed-=3072
			if object.Speed<122880
				object.Speed=122880
			endif
		endif
		CallFunction(Sonic_HandlePlayerTilt)
		CallFunction(Sonic_ProcessAnimationSpeed)
		if Object.Value6>0
			Object.Value6--
			object.XPos+=Player.ScreenXPos
			Object.Value0+=Player.ScreenYPos
		endif
		CallFunction(Sonic_HandleTileInteractions)
		if object.JumpPress==1
			Object.State=3
			Object.Value6=0
			Object.Frame=39
			Object.Value1=39
			Object.Value2=42
			Object.Value3=0
			Object.AnimationSpeed=80
			object.YVel=286720
			PlaySfx(0,0)
		endif
		if Object[4].Value5==0
			Object.State=2
			Object.Frame=9
			Object.Value1=9
			Object.Value2=14
			Object.Value3=0
		endif
		break
	case 8
		Object.Frame=1
		Object.Value6=0
		object.Speed=0
		break
	case 9
		if Object.Value6<128
			Object.Value6++
			object.Angle-=2
			if object.Angle<0
				object.Angle+=512
			endif
		else
			if Object[3].Type != TypeName[Time Stone]
				ResetObjectEntity(3, TypeName[Time Stone], 0, 0, -1572864)
				Object[3].iXPos=Screen.XCenter
				Object[3].Priority=1
			endif
		endif
		Object.Frame=Object.Value6
		Object.Frame>>=4
		Object.Frame+=81
		break
	case 10
		if Object.Value6==308
			Object[30].Type=TypeName[Stage Finish]
			Object[30].PropertyValue=1
		else
			Object.Value6++
		endif
		break
	case 11
		CallFunction(Sonic_ProcessPlayer)
		if object.Speed<327680
			object.Speed+=2048
		endif
		if inputDown.Down==1
			object.Speed-=3072
			if object.Speed<122880
				object.Speed=122880
			endif
		endif
		CallFunction(Sonic_HandlePlayerTilt)
		CallFunction(Sonic_ProcessAnimationSpeed)
		object.YVel-=8192
		object.YPos+=object.YVel
		if object.YPos<0
			object.YPos=0
			if Object[4].Value0>0
				if Object[4].Value5==0
					Object.State=2
					Object.Frame=9
					Object.Value1=9
					Object.Value2=14
					Object.Value3=0
				else
					Object.State=7
					Object.Frame=77
					Object.Value1=77
					Object.Value2=80
					Object.AnimationSpeed=80
					Object.Value3=0
				endif
			else
				object.ControlMode=-1
				Object.State=8
			endif
		endif
		break

	endswitch
	if object.XPos>Stage.curXBoundary2
		object.XPos=Stage.curXBoundary2
	endif
	if object.XPos<Stage.curXBoundary1
		object.XPos=Stage.curXBoundary1
	endif
	if Object.Value0>Stage.curYBoundary2
		Object.Value0=Stage.curYBoundary2
	endif
	if Object.Value0<Stage.curYBoundary1
		Object.Value0=Stage.curYBoundary1
	endif
	TileLayer[0].Angle=object.Angle
	Sin(TileLayer[0].XPos,TileLayer[0].Angle)
	Cos(TileLayer[0].ZPos,TileLayer[0].Angle)
	TileLayer[0].XPos*=-11264
	TileLayer[0].ZPos*=-11264
	TileLayer[0].XPos+=object.XPos
	TileLayer[0].ZPos+=Object.Value0
	TileLayer[0].YPos=object.YPos
	TileLayer[0].YPos/=3
	TileLayer[0].YPos+=5767168
endevent


event ObjectDraw
	object.draworder = 5
	temp0=TileLayer[0].YPos
	temp0>>=8
	temp0*=96
	temp0/=22528
	temp0+=128
	DrawSpriteScreenXY(0,Screen.XCenter,temp0)
	temp0=TileLayer[0].YPos
	temp0-=object.YPos
	temp0>>=8
	temp0*=96
	temp0/=22528
	temp0+=128
	switch Object.State
	default
		DrawSpriteScreenXY(Object.Frame,Screen.XCenter,temp0)
		break
	case 2
		temp1=Object.Frame
		temp2=Player.Tilt
		temp2>>=2
		temp2+=2
		switch temp2
		case 0
			temp1+=6
			Object.Direction=FACING_LEFT
			break
		case 1
			temp1+=12
			Object.Direction=FACING_LEFT
			break
		case 2
			Object.Direction=FACING_RIGHT
			break
		case 3
			temp1+=18
			Object.Direction=FACING_RIGHT
			break
		case 4
			temp1+=24
			Object.Direction=FACING_RIGHT
			break

		endswitch
		DrawSpriteScreenFX(temp1,FX_FLIP,Screen.XCenter,temp0)
		break

	endswitch
endevent


event ObjectStartup
	if Stage.PlayerListPos==0
		LoadSpriteSheet("Special/Sonic.gif")
	else
		LoadSpriteSheet("Special/Tails.gif")
	endif
	Object[2].Type=TypeName[Sonic]
	Object[2].Priority=1
	Object[2].Value5=22528
	Object[2].Frame=5
	Object[2].Value1=5
	Object[2].Value2=8
	Object[2].AnimationSpeed=30
	ArrayPos0=32
	while ArrayPos0<1056
		if Object[ArrayPos0].Type==TypeName[Sonic]
			object[2].XPos=Object[ArrayPos0].XPos
			Object[2].Value0=Object[ArrayPos0].YPos
			object[2].YPos=0
			object[2].Angle=Object[ArrayPos0].PropertyValue
			object[2].Angle<<=1
			ResetObjectEntity(ArrayPos0,TypeName[BlankObject],0,0,0)
		endif
		ArrayPos0++
	loop
	SpriteFrame(-20,-4,40,8,210,377)
	SpriteFrame(-20,-48,40,48,1,197)
	SpriteFrame(-20,-48,40,48,83,197)
	SpriteFrame(-20,-48,40,48,42,197)
	SpriteFrame(-20,-48,40,48,1,197)
	SpriteFrame(-20,-48,40,48,1,246)
	SpriteFrame(-20,-48,40,48,42,246)
	SpriteFrame(-20,-48,40,48,83,246)
	SpriteFrame(-20,-48,40,48,42,246)
	SpriteFrame(-20,-48,40,48,1,1)
	SpriteFrame(-20,-48,40,48,42,1)
	SpriteFrame(-20,-48,40,48,83,1)
	SpriteFrame(-20,-48,40,48,1,50)
	SpriteFrame(-20,-48,40,48,42,50)
	SpriteFrame(-20,-48,40,48,83,50)
	SpriteFrame(-20,-48,40,48,1,99)
	SpriteFrame(-20,-48,40,48,42,99)
	SpriteFrame(-20,-48,40,48,83,99)
	SpriteFrame(-20,-48,40,48,1,148)
	SpriteFrame(-20,-48,40,48,42,148)
	SpriteFrame(-20,-48,40,48,83,148)
	SpriteFrame(-20,-48,40,48,124,1)
	SpriteFrame(-20,-48,40,48,165,1)
	SpriteFrame(-20,-48,40,48,206,1)
	SpriteFrame(-20,-48,40,48,124,50)
	SpriteFrame(-20,-48,40,48,165,50)
	SpriteFrame(-20,-48,40,48,206,50)
	SpriteFrame(-20,-48,40,48,124,50)
	SpriteFrame(-20,-48,40,48,165,50)
	SpriteFrame(-20,-48,40,48,206,50)
	SpriteFrame(-20,-48,40,48,124,1)
	SpriteFrame(-20,-48,40,48,165,1)
	SpriteFrame(-20,-48,40,48,206,1)
	SpriteFrame(-20,-48,40,48,1,148)
	SpriteFrame(-20,-48,40,48,42,148)
	SpriteFrame(-20,-48,40,48,83,148)
	SpriteFrame(-20,-48,40,48,1,99)
	SpriteFrame(-20,-48,40,48,42,99)
	SpriteFrame(-20,-48,40,48,83,99)
	SpriteFrame(-20,-40,40,40,165,99)
	SpriteFrame(-20,-40,40,40,206,99)
	SpriteFrame(-20,-40,40,40,124,140)
	SpriteFrame(-20,-40,40,40,124,99)
	SpriteFrame(-20,-48,40,48,51,344)
	SpriteFrame(-21,-48,42,48,182,295)
	SpriteFrame(-25,-48,49,48,1,344)
	if Stage.PlayerListPos==0
		SpriteFrame(-21,-48,42,48,135,410)
		SpriteFrame(-20,-48,40,48,178,410)
	else
		SpriteFrame(-21,-48,42,48,135,426)
		SpriteFrame(-20,-48,40,48,178,426)
	endif
	SpriteFrame(-16,-32,54,32,17,442)
	SpriteFrame(-26,-32,52,32,78,442)
	SpriteFrame(-37,-32,54,32,178,475)
	SpriteFrame(-32,-32,48,32,1,475)
	SpriteFrame(-30,-32,60,32,115,475)
	SpriteFrame(-16,-32,48,32,208,344)
	SpriteFrame(-28,-48,56,48,92,344)
	SpriteFrame(-30,-32,60,32,54,475)
	if Stage.PlayerListPos==0
		SpriteFrame(-29,-32,58,32,149,344)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
		SpriteFrame(-30,-32,60,32,149,377)
	else
		SpriteFrame(-29,-32,58,37,149,344)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
		SpriteFrame(-30,-32,60,32,149,382)
	endif
	SpriteFrame(-20,-48,40,48,1,393)
	SpriteFrame(-20,-48,40,48,42,393)
	SpriteFrame(-20,-48,40,48,83,393)
	SpriteFrame(-20,-48,40,48,165,140)
	SpriteFrame(-20,-48,40,48,206,140)
	SpriteFrame(-20,-48,40,48,165,189)
	SpriteFrame(-20,-48,40,48,206,189)
	SpriteFrame(-20,-48,40,48,1,197)
	SpriteFrame(-20,-48,40,48,124,246)
	SpriteFrame(-20,-48,40,48,165,246)
	SpriteFrame(-20,-48,40,48,206,246)
	SpriteFrame(-20,-48,40,48,1,295)
	SpriteFrame(-20,-48,40,48,42,295)
	SpriteFrame(-16,-48,32,48,83,295)
	SpriteFrame(-16,-48,32,48,116,295)
	SpriteFrame(-16,-48,32,48,116,295)
	SpriteFrame(-16,-48,32,48,149,295)
endevent

event RSDK
	LoadSpriteSheet("Global/Display.gif")
	SetEditorIcon(Icon0,SingleIcon,-16,-16,32,32,1,143)
endevent
